package com.nbcio.pm.service;

import com.nbcio.common.mybatis.core.page.PageQuery;
import com.nbcio.common.mybatis.core.page.TableDataInfo;
import com.nbcio.pm.domain.bo.PmTeamProjectBo;
import com.nbcio.pm.domain.vo.PmTeamProjectVo;

import java.util.Collection;
import java.util.List;

/**
 * 团队项目关联Service接口
 *
 * @author nbacheng
 */
public interface IPmTeamProjectService {

    /**
     * 查询团队项目关联
     */
    PmTeamProjectVo queryById(Long id);

    /**
     * 查询团队项目关联列表
     */
    TableDataInfo<PmTeamProjectVo> queryPageList(PmTeamProjectBo bo, PageQuery pageQuery);

    /**
     * 查询团队项目关联列表
     */
    List<PmTeamProjectVo> queryList(PmTeamProjectBo bo);

    /**
     * 新增团队项目关联
     */
    Boolean insertByBo(PmTeamProjectBo bo);

    /**
     * 修改团队项目关联
     */
    Boolean updateByBo(PmTeamProjectBo bo);

    /**
     * 校验并批量删除团队项目关联信息
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    /**
     * 查询团队参与的项目列表
     *
     * @param teamId 团队ID
     * @return 项目列表
     */
    List<PmTeamProjectVo> queryByTeamId(Long teamId);

    /**
     * 查询项目参与的团队列表
     *
     * @param projectId 项目ID
     * @return 团队列表
     */
    List<PmTeamProjectVo> queryByProjectId(Long projectId);

    /**
     * 关联团队到项目
     *
     * @param teamId 团队ID
     * @param projectId 项目ID
     * @param isPrimary 是否主要团队
     * @return 是否成功
     */
    Boolean associateTeamToProject(Long teamId, Long projectId, Boolean isPrimary);

    /**
     * 取消团队与项目的关联
     *
     * @param teamId 团队ID
     * @param projectId 项目ID
     * @return 是否成功
     */
    Boolean disassociateTeamFromProject(Long teamId, Long projectId);

    /**
     * 批量添加团队成员到项目
     *
     * @param teamId 团队ID
     * @param projectId 项目ID
     * @return 是否成功
     */
    Boolean addTeamMembersToProject(Long teamId, Long projectId);

    /**
     * 从项目移除团队成员
     *
     * @param teamId 团队ID
     * @param projectId 项目ID
     * @return 是否成功
     */
    Boolean removeTeamMembersFromProject(Long teamId, Long projectId);
}
